/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import bc.ComponenteFacadeLocal;
import bc.TrabajoFacadeLocal;
import be.Articulo;
import be.Componente;
import be.Componentearticulo;
import be.Componenteoperacion;
import be.Componenteproducto;
import be.Componentetrabajo;
import be.Producto;
import be.Trabajo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Named;

/**
 *
 * @author yzavaleta
 */
@Named("managedBeanTrabajo")
@SessionScoped
public class ManagedBeanTrabajo implements Serializable {

    @EJB
    private TrabajoFacadeLocal trabajoFacade;
    @EJB
    private ComponenteFacadeLocal componenteFacade;
    private Trabajo objeto;
    private Trabajo objetoCrear;
    private List<Trabajo> lista;
    private List<Trabajo> listaFiltrada;
    private List<SelectItem> ListaItems = new LinkedList<SelectItem>();
    private HashMap<Integer, Trabajo> myMapItems = new HashMap<Integer, Trabajo>();
    private Componentetrabajo objetoComponenteTrabajo;
    private Articulo objetoArticulo;
    private Componenteproducto objetoComponenteProducto;
    private Componenteoperacion objetoComponenteOperacion;
    private Componentearticulo objetoComponenteArticulo;

    private List<ManagedBeanImpresoGeneral> listaImpresoGeneral;

    private ManagedBeanImpresoGeneral objetoManagedBeanImpresoGeneral;

    public ManagedBeanTrabajo() {
        objeto = new Trabajo();
        objetoArticulo = new Articulo();
        objetoCrear = new Trabajo();
        lista = new LinkedList<>();
        listaFiltrada = new LinkedList<>();
        objetoComponenteTrabajo = new Componentetrabajo();
        objetoComponenteProducto = new Componenteproducto();
        objetoComponenteOperacion = new Componenteoperacion();
        objetoComponenteArticulo = new Componentearticulo();
        listaImpresoGeneral = new LinkedList<>();
        objetoManagedBeanImpresoGeneral = new ManagedBeanImpresoGeneral();
    }

    public ManagedBeanImpresoGeneral getObjetoManagedBeanImpresoGeneral() {
        return objetoManagedBeanImpresoGeneral;
    }

    public void setObjetoManagedBeanImpresoGeneral(ManagedBeanImpresoGeneral objetoManagedBeanImpresoGeneral) {
        this.objetoManagedBeanImpresoGeneral = objetoManagedBeanImpresoGeneral;
    }

    public Componenteproducto getObjetoComponenteProducto() {
        return objetoComponenteProducto;
    }

    public void setObjetoComponenteProducto(Componenteproducto objetoComponenteProducto) {
        this.objetoComponenteProducto = objetoComponenteProducto;
    }

    public Componenteoperacion getObjetoComponenteOperacion() {
        return objetoComponenteOperacion;
    }

    public void setObjetoComponenteOperacion(Componenteoperacion objetoComponenteOperacion) {
        this.objetoComponenteOperacion = objetoComponenteOperacion;
    }

    public Componentearticulo getObjetoComponenteArticulo() {
        return objetoComponenteArticulo;
    }

    public void setObjetoComponenteArticulo(Componentearticulo objetoComponenteArticulo) {
        this.objetoComponenteArticulo = objetoComponenteArticulo;
    }

    public List<ManagedBeanImpresoGeneral> getListaImpresoGeneral() {
        return listaImpresoGeneral;
    }

    public void setListaImpresoGeneral(List<ManagedBeanImpresoGeneral> listaImpresoGeneral) {
        this.listaImpresoGeneral = listaImpresoGeneral;
    }

    public Articulo getObjetoArticulo() {
        return objetoArticulo;
    }

    public void setObjetoArticulo(Articulo objetoArticulo) {
        this.objetoArticulo = objetoArticulo;
    }

    public Componentetrabajo getObjetoComponenteTrabajo() {
        return objetoComponenteTrabajo;
    }

    public void setObjetoComponenteTrabajo(Componentetrabajo objetoComponenteTrabajo) {
        this.objetoComponenteTrabajo = objetoComponenteTrabajo;
    }

    public Trabajo getObjeto() {
        return objeto;
    }

    public void setObjeto(Trabajo objeto) {
        this.objeto = objeto;
    }

    public Trabajo getObjetoCrear() {
        return objetoCrear;
    }

    public void setObjetoCrear(Trabajo objetoCrear) {
        this.objetoCrear = objetoCrear;
    }

    public List<Trabajo> getLista() {
        return lista;
    }

    public void setLista(List<Trabajo> lista) {
        this.lista = lista;
    }

    public List<Trabajo> getListaFiltrada() {
        return listaFiltrada;
    }

    public void setListaFiltrada(List<Trabajo> listaFiltrada) {
        this.listaFiltrada = listaFiltrada;
    }

    public List<SelectItem> getListaItems() {
        return ListaItems;
    }

    public void setListaItems(List<SelectItem> ListaItems) {
        this.ListaItems = ListaItems;
    }

    public HashMap<Integer, Trabajo> getMyMapItems() {
        return myMapItems;
    }

    public void setMyMapItems(HashMap<Integer, Trabajo> myMapItems) {
        this.myMapItems = myMapItems;
    }

    public void crear() {
        try {
            objetoCrear.setFecha(new Date());
            objetoCrear.setFechaCreacionSistema(new Date());
            objetoCrear.setFechaCreacionUsuario(new Date());
            objetoCrear.setFechaEliminacion(new Date());
            objetoCrear.setEstadoExistencia(1);
            objetoCrear.setPresupuesto(null);

            System.out.println(" se creo correctamente");
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("REGISTRO GRABADO CON EXITO", "NUEVO ITEM"));

        } catch (Exception e) {
            e.printStackTrace();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("ERROR AL GRABAR", "CONTACTE AL ADMINISTRADOR"));

        }

    }

    public void nuevo() {
        objetoCrear = new Trabajo();
        // seteando una lista vacia
        objetoCrear.setComponentetrabajoList(new ArrayList<Componentetrabajo>());
        objetoComponenteTrabajo = new Componentetrabajo();
    }

    public List<Componentetrabajo> getListaComponentesTrabajo(Trabajo objetoTrabajo) {

        List<Componentetrabajo> listaComponentes = new LinkedList<>();
        System.out.println(" estamos recibiendo en getListaComponentesTrabajo" + objetoTrabajo);
        if (objetoTrabajo != null) {
            listaComponentes = objetoTrabajo.getComponentetrabajoList();
        }

        return listaComponentes;
    }

    public void agregarComponente() {
        //   System.out.println(" HOLA MUNDO ");
        // agregando componentes a la lista
        System.out.println(" AGREGANDO COMPONENTES A LA LISTA" + objetoComponenteTrabajo.getTinta());

        if (objetoCrear.getComponentetrabajoList() == null) {
            objetoCrear.setComponentetrabajoList(new ArrayList<Componentetrabajo>());
        }

        if (objetoCrear.getComponentetrabajoList() != null) {

            System.out.println("Agrego Correctamente");
            objetoCrear.getComponentetrabajoList().add(objetoComponenteTrabajo);

            System.out.println("AHORA TENEMOS:" + objetoCrear.getComponentetrabajoList().size());

            objetoComponenteTrabajo = new Componentetrabajo();
        }

    }

    public void agregarElementoListaImpresoGeneral(Producto objetoProducto) {
        // componente 1 = IMPRESO 1
        objetoManagedBeanImpresoGeneral.setObjetoComponente(componenteFacade.find(1));
        objetoManagedBeanImpresoGeneral.setObjetoProducto(objetoProducto);
        listaImpresoGeneral.add(objetoManagedBeanImpresoGeneral);
        objetoManagedBeanImpresoGeneral = new ManagedBeanImpresoGeneral();

    }

}
